package com.shujia

object Demo25Type {
  def main(args: Array[String]): Unit = {

    /**
     * 显示类型转换
     */

    val str: String = "100"
    //显示转换
    val i: Int = str.toInt
    println(i)

    def fun(i: Int): Unit = {
      println(i * 100)
    }

    fun(100)
    fun(200)
    //显示转换
    fun("200".toInt)

    /**
     * 隐式转换 - 可以动态将一个类型转换另外一个类型，给对象动态增加新的方法
     * 1、隐式转换方法，scala会隐式将参数类型转换成返回值类型
     * 和方法名无关，和参选类型和返回值类型相关
     * 再同一个作用域中只能存在一个相同类型的隐式转换
     */
    //1、隐式转换方法
    implicit def doubleToInt(dou: Double): Int = {
      println("doubleToInt被执行")
      dou.toInt
    }

    fun(3.14)
    fun(1.2)

    //将int转换成String的隐式转换
    implicit def intToString(i: Int): String = i.toString

    val j: Int = 10001

    //int被隐式转换程String类型了，所以j可以使用Strng的方法
    println(j.split("0").toList)
  }
}
